import {reqAddOrUpdateShopCart, reqDeleteOneCart, reqGetShopCartList, reqUpdateAllIsCheck, reqUpdateOneIsCheck} from '@/api/index'
const state = {
  shopCartList:[],
};
const mutations = {
  SET_SHOPCARTLIST(state,shopCartList){
    state.shopCartList = shopCartList;
  }
};
const actions = {
  // async函数返回promise对象
  //修改商品数量
  async addOrUpdateShopCart(context,{skuId,skuNum}) {
    try {
      //当是失败的promise，await不接收，抛出promise的错误信息。
      const result = await reqAddOrUpdateShopCart(skuId,skuNum)
      if (result.code === 200) {
        return 'ok';
      } else {
        return Promise.reject(new Error('请求成功，但是加入数据库失败'));
      }
    } catch (error) {
      return Promise.reject(new Error('请求失败'));
    }
  },

  async getShopCartList({commit}) {
    try {
      const result = await reqGetShopCartList();
      if (result.code === 200) {
        commit('SET_SHOPCARTLIST',result.data);
      }else {
        alert('请求成功，但是获取购物车列表数据失败');
      }
    } catch (error) {
      alert('获取购物车列表请求失败');
    }
  },

  //修改商品选中状态
  async updateOneIsCheck(context,{skuId,isChecked}){
    try {
      const result = await reqUpdateOneIsCheck(skuId,isChecked);
      if (result.code === 200 ){
        return 'ok'
      } else {
        return Promise.reject(new Error('修改商品选中状态失败'))
      }
    } catch (error) {
      return Promise.reject(new Error('修改商品选中状态的请求失败'))
    }
  },

  //修改商品全选状态
  async updateAllIsCheck(context,{isChecked,skuIdList}){
    try {
      const result = await reqUpdateAllIsCheck(isChecked,skuIdList);
      if (result.code === 200) {
        return 'ok';
      }else {
        return Promise.reject(new Error('请求成功，但是修改全选失败'));
      }
    } catch (error) {
      return Promise.reject(new Error('修改全选请求失败'));
    }
  },

  //删除单个购物车
  async deleteOneCart (context,skuId){
    try {
      const result = await reqDeleteOneCart(skuId);
      if (result.code === 200) {
        return 'ok'
      }else {
        return Promise.reject(new Error('请求成功，但是删除失败'))
      }
    } catch (error) {
      return Promise.reject(new Error('请求失败'))
    }
  },

  //删除多个购物车
  async deleteMoreCart(context,skuList){
    // console.log(111)
    // try {
    //   const result = await reqDeleteMoreCart(skuList);
    //   // console.log(result)
    //   if (result.code === 200) {
    //     return 'ok'
    //   } else {
    //     return Promise.reject(new Error('请求成功，但是删除多个购物车失败'));
    //   }
    // } catch (error) {
    //   return Promise.reject(new Error('请求失败'));
    // }

    //换一个思路
    try {
      let promises = [];
      skuList.forEach(skuId => {
        const promise = context.dispatch('deleteOneCart',skuId);
        promises.push(promise);
      });

      //Promise.all返回promise。当所有的promise都为成功，值是所有promise的result组成的数组。当有promise返回失败，值是失败的promise的值
      await Promise.all(promises);
      //到这里，说明成功了，值是数组，但是我没接收处理
      return 'ok';
    } catch (error) {
      //说明失败了，error是失败的promise的值，是一个错误对象
      return Promise.reject(new Error('删除多个购物车请求失败'))
    }
  }
};
const getters = {};

export default {
  namespaced:true,
  state,
  mutations,
  actions,
  getters,

}